//图片属性
import 'dart:io';

import 'package:hc_ui/utils/hc_string_util.dart';
import 'package:hc_ui/utils/hc_url_util.dart';

///图片的类型
/// assets资源文件
/// file 本机文件
/// base64图片
/// network资源
enum HcImageType { assets, file, base64, network }

class HCFileUtil {
  const HCFileUtil._();

  /// 检测文件是否为本地文件
  static bool isAssetsPath(String url) {
    return !url.startsWith("/") && !url.toLowerCase().startsWith("http");
  }

  /// 检测图片类型并格式化路径
  static Map<String, dynamic> checkAndFixImagePath(String url) {
    Map<String, dynamic> result = {};
    // /开头可能是本地资源也可能是网络资源的 相对地址
    // 本地资源路径规则
    // Android: /data/user 或/storage/emulated/0/Android..
    // ios /var/mobile/...
    if (url.startsWith('/')) {
      File file = File(url);
      //检测文件是否存在
      bool isExists = file.existsSync();
      if (isExists) {
        result['type'] = HcImageType.file;
        result['url'] = url;
        return result;
      }
    }
    //如果是网络或者带/非本地资源
    if (url.toLowerCase().startsWith('http') || url.startsWith('/')) {
      result['type'] = HcImageType.network;
      result['url'] = HcUrlUtil.imageUrlFix(imageUrl: url);
    } else if (!url.contains('.') && HcStringUtil.checkBase64(url)) {
      //如果是base64获取去头后的路径
      result['type'] = HcImageType.base64;
      List<String> base64SplitList = url.split(",");
      result['url'] = base64SplitList[base64SplitList.length - 1];
    } else {
      //String字符串不是本地图片也不是网络图片也不是base64 开头没有带/ 所以是assets资源
      result['type'] = HcImageType.assets;
      result['url'] = url;
    }
    return result;
  }
}
